package kr.co.bettersoft.sendme.activity;

import kr.co.bettersoft.sendme.util.SendMeActivityManager;
import kr.co.bettersoft.sendme.util.SendMeConstant;
import kr.co.bettersoft.sendme.activity.R;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 비밀번호 입력 화면이다.
 * 
 * @author johnkim
 *
 */
public class SendMePasswordActivity extends Activity {

	public static String TAG = SendMePasswordActivity.class.getSimpleName();
	
	// 액티비티 매니저를 가져 온다.
	private SendMeActivityManager sendMeActivityManager = SendMeActivityManager.getInstance();
	
	
	// 앱을 종료 한다.
	private static final int ALERT_DIALOG_EXIT_ID = 101;
	
	// 입력한 비밀번호에 맞춰 그림을 다시 세팅한다.
	private static final int THREAD_IMAGE_VIEW_PASSWORD = 102;
	
	// 비밀번호가 일치하면 toast 를 띄운다.
	private static final int THREAD_EXACT_PASSWORD = 103;
	
	// 비밀번호 설정되었다는 toast 띄운다.
	private static final int THREAD_PASSWORD_SET_SUCCESS = 104;
	
	// 사용자 확인 창을 띄운다
	private static final int ALERT_SHOW_MESSAGE = 105;
	
	// 전달 받은 동작 코드의 액션
	private static final int ACTION_CODE_SOME_KEY_CHECK = 201;			//  키 확인 (마스터 또는 퍼블릭)
	private static final int ACTION_CODE_MASTER_KEY_SETTING = 211;		//  마스터 키 세팅
	private static final int ACTION_CODE_MASTER_KEY_CHECK  = 212;		//  마스터 키 확인
	private static final int ACTION_CODE_MASTER_KEY_CHANGE  = 213;		//  마스터 키 변경
	private static final int ACTION_CODE_PUBLIC_KEY_SETTING  = 221;		//  퍼블릭 키 세팅
	private static final int ACTION_CODE_PUBLIC_KEY_CHECK  = 222;		//  퍼블릭 키 확인
	private static final int ACTION_CODE_PUBLIC_KEY_CHANGE  = 223;		//  퍼블릭 키 변경
	// 전달 받은 동작 코드 값
	private int receiveActionCode = 0;
	
	
	// 마스터 비밀번호.
	private String MASTER_PASSWORD = "";
		
	// 퍼블릭 비밀번호.
	private String PUBLIC_PASSWORD = "";
	
	// 기능 모드.(MASTER/PUBLIC)
	private String FUNCTION_MODE = "";
	// 화면 모드. (INPUT,REINPUT,CHANGE)
	private int SCREEN_MODE = 0;			// 1 : 이전 '입력', 2 : '새' 입력 , 3 : '재' 입력 
	// 화면 모드에 따른 상단 문구
	private String SCREEN_MODE_1_TEXT = "비밀번호를 입력해 주십시오.";
	private String SCREEN_MODE_2_TEXT = "새로운 비밀번호를 입력해 주십시오.";
	private String SCREEN_MODE_3_TEXT = "확인을 위해 비밀번호를 다시 입력해 주십시오.";
	// 상단 문구 뷰
	TextView textViewInformation;
	
	// 사용자 휴대 전화번호.
	private String PHONE_NUMBER = "";
	
	ImageView imageViewPassword1;
	ImageView imageViewPassword2;
	ImageView imageViewPassword3;
	ImageView imageViewPassword4;
	
	ImageButton imageButtonNum01;
	ImageButton imageButtonNum02;
	ImageButton imageButtonNum03;
	ImageButton imageButtonNum04;
	ImageButton imageButtonNum05;
	ImageButton imageButtonNum06;
	ImageButton imageButtonNum07;
	ImageButton imageButtonNum08;
	ImageButton imageButtonNum09;
	ImageButton imageButtonNum;
	ImageButton imageButtonNum00;
	ImageButton imageButtonNumBack;
	
	// 입력한 비밀번호.
	private String COMPARE_PASSWORD = "";
	// 비밀번호 임시 저장 값
	private String TEMP_PASSWORD = "";
	
	
	// 데이터 전달용 번들과 인텐트
	Bundle extraBundle;
	Intent resultIntent;
	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// 커스텀 타이블 바를 설정 한다.
		Window window = getWindow();
		window.requestFeature(Window.FEATURE_CUSTOM_TITLE);
				
		setContentView(R.layout.activity_send_me_password);
		
		window.setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_bar_01);
		
		// 액티비티 매니저에 담는다.
		sendMeActivityManager.addActivity(this);
		
		// 설정파일을 가져 온다.
		this.selectPreferenceData();
		
		
		/*
		 *  결과 반환용 인텐트
		 */
		extraBundle = new Bundle();
		resultIntent = new Intent();
		this.setResult(RESULT_CANCELED, resultIntent);	// RESULT_OK 를 돌려주면 부모에서 받아 처리한다.
		
		
		
		/*
		 *  전달 받은 동작 코드
		 */
		Intent receiveIntent = this.getIntent();
		receiveActionCode = receiveIntent.getIntExtra("ACTION_CODE", 0);
		
		textViewInformation = (TextView) findViewById(R.id.textViewInformation);
		// 액션 모드에 따라 상단 문구 설정.
		switch(receiveActionCode){
		case ACTION_CODE_SOME_KEY_CHECK:
			Log.d(TAG,"ACTION_CODE_SOME_KEY_CHECK");
			setScreenMode(1);
			break;
//		case ACTION_CODE_MASTER_KEY_SETTING:
//			setScreenMode(2);
//			break;
		case ACTION_CODE_MASTER_KEY_CHECK:
			Log.d(TAG,"ACTION_CODE_MASTER_KEY_CHECK");
			setScreenMode(1);
			break;
		case ACTION_CODE_MASTER_KEY_CHANGE:
			Log.d(TAG,"ACTION_CODE_MASTER_KEY_CHANGE");
			if(MASTER_PASSWORD.length()<1) {
				setScreenMode(2);
			} else {
				setScreenMode(1);
			}
			break;
//		case ACTION_CODE_PUBLIC_KEY_SETTING:
//			setScreenMode(2);
//			break;
		case ACTION_CODE_PUBLIC_KEY_CHECK:
			Log.d(TAG,"ACTION_CODE_PUBLIC_KEY_CHECK");
			setScreenMode(1);
			break;
		case ACTION_CODE_PUBLIC_KEY_CHANGE:
			Log.d(TAG,"ACTION_CODE_PUBLIC_KEY_CHANGE");
			if(PUBLIC_PASSWORD.length()<1) {
				setScreenMode(2);
			} else {
				setScreenMode(1);
			}
			break;
		default:
			Log.d(TAG,"default");
			finish();
		}
		
		imageViewPassword1 = (ImageView)findViewById(R.id.imageViewPassword1);
		imageViewPassword2 = (ImageView)findViewById(R.id.imageViewPassword2);
		imageViewPassword3 = (ImageView)findViewById(R.id.imageViewPassword3);
		imageViewPassword4 = (ImageView)findViewById(R.id.imageViewPassword4);
		
		imageButtonNum01 = (ImageButton)findViewById(R.id.imageButtonNum01);
		imageButtonNum02 = (ImageButton)findViewById(R.id.imageButtonNum02);
		imageButtonNum03 = (ImageButton)findViewById(R.id.imageButtonNum03);
		imageButtonNum04 = (ImageButton)findViewById(R.id.imageButtonNum04);
		imageButtonNum05 = (ImageButton)findViewById(R.id.imageButtonNum05);
		imageButtonNum06 = (ImageButton)findViewById(R.id.imageButtonNum06);
		imageButtonNum07 = (ImageButton)findViewById(R.id.imageButtonNum07);
		imageButtonNum08 = (ImageButton)findViewById(R.id.imageButtonNum08);
		imageButtonNum09 = (ImageButton)findViewById(R.id.imageButtonNum09);
		imageButtonNum = (ImageButton)findViewById(R.id.imageButtonNum);
		imageButtonNum00 = (ImageButton)findViewById(R.id.imageButtonNum00);
		imageButtonNumBack = (ImageButton)findViewById(R.id.imageButtonNumBack);
		
		// 1 을 터치했을때.
		imageButtonNum01.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i(TAG, "pressed 1");
				
				// COMPARE_PASSWORD 에 한 글자를 입력하고, 그림을 다시 세팅한다.
				int intComparePassword = COMPARE_PASSWORD.length();
				
				if(intComparePassword == 0) {
					COMPARE_PASSWORD = "1";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 1) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "1";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 2) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "1";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 3) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "1";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
					
					// 비밀번호를 비교한다.
					comparePassword();
				}
				
				Log.i(TAG, "COMPARE_PASSWORD : " + COMPARE_PASSWORD);
			}
		});
		
		// 2 를 터치했을때.
		imageButtonNum02.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i(TAG, "pressed 2");
				
				// COMPARE_PASSWORD 에 한 글자를 입력하고, 그림을 다시 세팅한다.
				int intComparePassword = COMPARE_PASSWORD.length();
				
				if(intComparePassword == 0) {
					COMPARE_PASSWORD = "2";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 1) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "2";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 2) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "2";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 3) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "2";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
					
					// 비밀번호를 비고한다.
					comparePassword();
				}
				
				Log.i(TAG, "COMPARE_PASSWORD : " + COMPARE_PASSWORD);
			}
		});
		
		// 3 을 터치했을때.
		imageButtonNum03.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i(TAG, "pressed 3");
				
				// COMPARE_PASSWORD 에 한 글자를 입력하고, 그림을 다시 세팅한다.
				int intComparePassword = COMPARE_PASSWORD.length();
				
				if(intComparePassword == 0) {
					COMPARE_PASSWORD = "3";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 1) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "3";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 2) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "3";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 3) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "3";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
					
					// 비밀번호를 비교한다.
					comparePassword();
				}
				
				Log.i(TAG, "COMPARE_PASSWORD : " + COMPARE_PASSWORD);
			}
		});
		
		// 4 를 터치했을때.
		imageButtonNum04.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i(TAG, "pressed 4");
				
				// COMPARE_PASSWORD 에 한 글자를 입력하고, 그림을 다시 세팅한다.
				int intComparePassword = COMPARE_PASSWORD.length();
				
				if(intComparePassword == 0) {
					COMPARE_PASSWORD = "4";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 1) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "4";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 2) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "4";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 3) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "4";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
					
					// 비밀번호를 비교한다.
					comparePassword();
				}
				
				Log.i(TAG, "COMPARE_PASSWORD : " + COMPARE_PASSWORD);
			}
		});
		
		// 5 를 터치했을때.
		imageButtonNum05.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i(TAG, "pressed 5");
				
				// COMPARE_PASSWORD 에 한 글자를 입력하고, 그림을 다시 세팅한다.
				int intComparePassword = COMPARE_PASSWORD.length();
				
				if(intComparePassword == 0) {
					COMPARE_PASSWORD = "5";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 1) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "5";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 2) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "5";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 3) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "5";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
					
					// 비밀번호를 비교한다.
					comparePassword();
				}
				
				Log.i(TAG, "COMPARE_PASSWORD : " + COMPARE_PASSWORD);
			}
		});
		
		// 6 을 터치했을때.
		imageButtonNum06.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i(TAG, "pressed 6");
				
				// COMPARE_PASSWORD 에 한 글자를 입력하고, 그림을 다시 세팅한다.
				int intComparePassword = COMPARE_PASSWORD.length();
				
				if(intComparePassword == 0) {
					COMPARE_PASSWORD = "6";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 1) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "6";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 2) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "6";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 3) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "6";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
					
					// 비밀번호를 비교한다.
					comparePassword();
				}
				
				Log.i(TAG, "COMPARE_PASSWORD : " + COMPARE_PASSWORD);
			}
		});
		
		// 7 을 터치했을때.
		imageButtonNum07.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i(TAG, "pressed 7");
				
				// COMPARE_PASSWORD 에 한 글자를 입력하고, 그림을 다시 세팅한다.
				int intComparePassword = COMPARE_PASSWORD.length();
				
				if(intComparePassword == 0) {
					COMPARE_PASSWORD = "7";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 1) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "7";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 2) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "7";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 3) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "7";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
					
					// 비밀번호를 비교한다.
					comparePassword();
				}
				
				Log.i(TAG, "COMPARE_PASSWORD : " + COMPARE_PASSWORD);
			}
		});
		
		// 8 을 터치했을때.
		imageButtonNum08.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i(TAG, "pressed 8");
				
				// COMPARE_PASSWORD 에 한 글자를 입력하고, 그림을 다시 세팅한다.
				int intComparePassword = COMPARE_PASSWORD.length();
				
				if(intComparePassword == 0) {
					COMPARE_PASSWORD = "8";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 1) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "8";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 2) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "8";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 3) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "8";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
					
					// 비밀번호를 비교한다.
					comparePassword();
				}
				
				Log.i(TAG, "COMPARE_PASSWORD : " + COMPARE_PASSWORD);
			}
		});
		
		// 9 를 터치했을때.
		imageButtonNum09.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i(TAG, "pressed 9");
				
				// COMPARE_PASSWORD 에 한 글자를 입력하고, 그림을 다시 세팅한다.
				int intComparePassword = COMPARE_PASSWORD.length();
				
				if(intComparePassword == 0) {
					COMPARE_PASSWORD = "9";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 1) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "9";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 2) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "9";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 3) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "9";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
					
					// 비밀번호를 비교한다.
					comparePassword();
				}
				
				Log.i(TAG, "COMPARE_PASSWORD : " + COMPARE_PASSWORD);
			}
		});
		
		// 0 을 터치했을때.
		imageButtonNum00.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i(TAG, "pressed 3");
				
				// COMPARE_PASSWORD 에 한 글자를 입력하고, 그림을 다시 세팅한다.
				int intComparePassword = COMPARE_PASSWORD.length();
				
				if(intComparePassword == 0) {
					COMPARE_PASSWORD = "0";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 1) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "0";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 2) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "0";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 3) {
					COMPARE_PASSWORD = COMPARE_PASSWORD + "0";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
					
					// 비밀번호를 비교한다.
					comparePassword();
				}
				
				Log.i(TAG, "COMPARE_PASSWORD : " + COMPARE_PASSWORD);
			}
		});
		
		// back(delete) 을 터치했을때.
		imageButtonNumBack.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				int intComparePassword = COMPARE_PASSWORD.length();
				
				if(intComparePassword == 0) {
				} else if(intComparePassword == 1) {
					COMPARE_PASSWORD = "";
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 2) {
					COMPARE_PASSWORD = COMPARE_PASSWORD.substring(0, 1);
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 3) {
					COMPARE_PASSWORD = COMPARE_PASSWORD.substring(0, 2);
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				} else if(intComparePassword == 4) {
					COMPARE_PASSWORD = COMPARE_PASSWORD.substring(0, 3);
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
				}
				
				Log.i(TAG, "COMPARE_PASSWORD : " + COMPARE_PASSWORD);
			}
		});
		
		
	}
	
	
	
	/**
	 * 비밀번호를 비교한다.
	 */
	public void comparePassword() {
		Log.i(TAG, "comparePassword");
		
		switch(receiveActionCode) {
		case ACTION_CODE_SOME_KEY_CHECK:		//  키 확인 (마스터 또는 퍼블릭)
			Log.d(TAG,"ACTION_CODE_SOME_KEY_CHECK");
			
			
			// 마스터 키를 입력 받았을때
			if(MASTER_PASSWORD.length()>0 && (COMPARE_PASSWORD).equals(MASTER_PASSWORD)) {
				mHandler.sendMessage(mHandler.obtainMessage(THREAD_EXACT_PASSWORD));
				
				returnResultAndFinish(ACTION_CODE_MASTER_KEY_CHECK, "SUCCESS");
				
//				Intent i = new Intent(SendMePasswordActivity.this, SendMeMainActivity.class);
//				startActivity(i);
//				
//				// 종료하기 전에 액티비티 매니져에서 액티비티를 삭제 한다.
//				sendMeActivityManager.removeActivity(SendMePasswordActivity.this);
//				// 액티비티를 종료 한다.
//				finish();
				
			// 퍼블릭 키를 입력 받았을때
			} else if( PUBLIC_PASSWORD.length()>0 && (COMPARE_PASSWORD).equals(PUBLIC_PASSWORD)) {
				mHandler.sendMessage(mHandler.obtainMessage(THREAD_EXACT_PASSWORD));
				
				returnResultAndFinish(ACTION_CODE_PUBLIC_KEY_CHECK, "SUCCESS");
			// 키가 없을때
			} else if(MASTER_PASSWORD.length()<1 && PUBLIC_PASSWORD.length()<1) {
				// 이런 경우는 있을수가 없지만 발생한다면 비번이 없으므로 마스터 모드로 반환
				returnResultAndFinish(ACTION_CODE_MASTER_KEY_CHECK, "SUCCESS");
			// 키가 틀렸을때 	
			} else {
				showAlertMessage("잘못 입력 하셨습니다.\n다시 입력해주십시오.");
				setScreenMode(1);
//				COMPARE_PASSWORD = "";
//				mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
			}
			break;
			
		case ACTION_CODE_MASTER_KEY_SETTING:	//  마스터 키 세팅 (이전 키값이 없어서 새로 설정하는 경우)
			Log.d(TAG,"ACTION_CODE_MASTER_KEY_SETTING");
			if(SCREEN_MODE == 2) {
				// 현재 값을 임시값에 저장
				TEMP_PASSWORD = COMPARE_PASSWORD;

				setScreenMode(3);
				
			} else if(SCREEN_MODE == 3) {
				// 입력된 값과 임시값을 비교
				// 두 값이 일치 하는 경우
				if(COMPARE_PASSWORD.equals(TEMP_PASSWORD)) {
					// 퍼블릭, 마스터 키가 같은지 비교 - 같은 경우
					if(COMPARE_PASSWORD.equals(PUBLIC_PASSWORD)) {
						// 임시 값을 초기화
						TEMP_PASSWORD = "";
						
						setScreenMode(2);
						
						showAlertMessage("Master Key와 Public Key에 동일한 비밀번호를 사용할 수 없습니다");
					} else {
						// 마스터 키 값을 저장
						savePreferenceMasterKey(COMPARE_PASSWORD);
					}
				// 두 값이 일치 하지 않는 경우	
				} else {
					// 임시 값을 초기화
					TEMP_PASSWORD = "";
					
					setScreenMode(2);
					
					showAlertMessage("입력한 두 값이 일치하지 않습니다");
				}
			
			}
			break;
		case ACTION_CODE_MASTER_KEY_CHECK:		//  마스터 키 확인
			Log.d(TAG,"ACTION_CODE_MASTER_KEY_CHECK");

			// 저장된 마스터 키와 입력받은 값을 비교
			// 두 값이 일치 하는 경우
			if(COMPARE_PASSWORD.equals(MASTER_PASSWORD)) {
				// 마스터 키 확인 됨
				returnResultAndFinish(ACTION_CODE_MASTER_KEY_CHECK, "SUCCESS");
				
			// 두 값이 일치 하지 않는 경우	
			} else {
				
				setScreenMode(1);
				
//				showAlertMessage("입력한 비밀번호가 틀립니다");
				showAlertMessage("SendMe 실행시 로그인 한 비밀번호와 일치하지 않습니다.");
			}
			
			break;
		case ACTION_CODE_MASTER_KEY_CHANGE:		//  마스터 키 변경
			Log.d(TAG,"ACTION_CODE_MASTER_KEY_CHANGE");

			if(SCREEN_MODE ==1) {

				// 저장된 마스터 키와 입력받은 값을 비교
				// 두 값이 일치 하는 경우
				if(COMPARE_PASSWORD.equals(MASTER_PASSWORD)) {
					// 마스터 키 확인 됨
					
					setScreenMode(2);
					
				// 두 값이 일치 하지 않는 경우	
				} else {
					
					setScreenMode(1);
					
//					showAlertMessage("입력한 비밀번호가 틀립니다");
					showAlertMessage("SendMe 실행시 로그인 한 비밀번호와 일치하지 않습니다.");
				}
				
			} else if(SCREEN_MODE == 2) {
				// 현재 값을 임시값에 저장
				TEMP_PASSWORD = COMPARE_PASSWORD;
				
				setScreenMode(3);
				
			} else if(SCREEN_MODE == 3) {
				// 입력된 값과 임시값을 비교
				// 두 값이 일치 하는 경우
				if(COMPARE_PASSWORD.equals(TEMP_PASSWORD)) {
					// 퍼블릭, 마스터 키가 같은지 비교 - 같은 경우
					if(COMPARE_PASSWORD.equals(PUBLIC_PASSWORD)) {
						showAlertMessage("Master Key와 Public Key를 동일한 비밀번호로 설정할 수 없습니다");
						
						// 임시 값을 초기화
						TEMP_PASSWORD = "";
						
						setScreenMode(2);
					} else {
						// 마스터 키 값을 저장
						savePreferenceMasterKey(COMPARE_PASSWORD);
					}
				// 두 값이 일치 하지 않는 경우	
				} else {
					// 임시 값을 초기화
					TEMP_PASSWORD = "";
					
					setScreenMode(2);
					
					showAlertMessage("입력한 두 값이 일치하지 않습니다");
				}
			}

			break;
		case ACTION_CODE_PUBLIC_KEY_SETTING:	//  퍼블릭 키 세팅
			Log.d(TAG,"ACTION_CODE_PUBLIC_KEY_SETTING");
			
			if(SCREEN_MODE == 2) {
				// 현재 값을 임시값에 저장
				TEMP_PASSWORD = COMPARE_PASSWORD;

				setScreenMode(3);
				
			} else if(SCREEN_MODE == 3) {
				// 입력된 값과 임시값을 비교
				// 두 값이 일치 하는 경우
				if(COMPARE_PASSWORD.equals(TEMP_PASSWORD)) {
					// 퍼블릭, 마스터 키가 같은지 비교 - 같은 경우
					if(COMPARE_PASSWORD.equals(MASTER_PASSWORD)) {
						showAlertMessage("Master Key와 Public Key를 동일한 비밀번호로 설정할 수 없습니다");
						// 임시 값을 초기화
						TEMP_PASSWORD = "";
						
						setScreenMode(2);
					} else {
						// 퍼블릭 키 값을 저장
						savePreferencePublicKey(COMPARE_PASSWORD);
					}
				// 두 값이 일치 하지 않는 경우	
				} else {
					// 임시 값을 초기화
					TEMP_PASSWORD = "";
					
					setScreenMode(2);
					
					showAlertMessage("입력한 두 값이 일치하지 않습니다");
				}
			}
			break;
		case ACTION_CODE_PUBLIC_KEY_CHECK:		//  퍼블릭 키 확인
			Log.d(TAG,"ACTION_CODE_PUBLIC_KEY_CHECK");
			
			// 저장된 퍼블릭 키와 입력받은 값을 비교
			// 두 값이 일치 하는 경우
			if(COMPARE_PASSWORD.equals(PUBLIC_PASSWORD)) {
				// 퍼블릭 키 확인 됨
				returnResultAndFinish(ACTION_CODE_PUBLIC_KEY_CHECK, "SUCCESS");
			// 두 값이 일치 하지 않는 경우	
			} else {
				
				setScreenMode(1);
				
//				showAlertMessage("입력한 비밀번호가 틀립니다");
				showAlertMessage("SendMe 실행시 로그인 한 비밀번호와 일치하지 않습니다.");
				
			}
			
			break;
		case ACTION_CODE_PUBLIC_KEY_CHANGE:		//  퍼블릭 키 변경
			Log.d(TAG,"ACTION_CODE_PUBLIC_KEY_CHANGE");
			
			if(SCREEN_MODE ==1) {

				// 저장된 퍼블릭 키와 입력받은 값을 비교
				// 두 값이 일치 하는 경우
				if(COMPARE_PASSWORD.equals(PUBLIC_PASSWORD)) {
					// 퍼블릭 키 확인 됨
					
					setScreenMode(2);
					
				// 두 값이 일치 하지 않는 경우	
				} else {
					
					setScreenMode(1);
					
//					showAlertMessage("입력한 비밀번호가 틀립니다");		
					showAlertMessage("SendMe 실행시 로그인 한 비밀번호와 일치하지 않습니다.");					
				}
				
			} else if(SCREEN_MODE == 2) {
				// 현재 값을 임시값에 저장
				TEMP_PASSWORD = COMPARE_PASSWORD;

				setScreenMode(3);
				
			} else if(SCREEN_MODE == 3) {
				// 입력된 값과 임시값을 비교
				// 두 값이 일치 하는 경우
				if(COMPARE_PASSWORD.equals(TEMP_PASSWORD)) {
					// 퍼블릭, 마스터 키가 같은지 비교 - 같은 경우
					if(COMPARE_PASSWORD.equals(MASTER_PASSWORD)) {
						
						// 임시 값을 초기화
						TEMP_PASSWORD = "";

						setScreenMode(2);
						
						showAlertMessage("Master Key와 Public Key를 동일한 비밀번호로 설정할 수 없습니다");
					} else {
						// 퍼블릭 키 값을 저장
						savePreferencePublicKey(COMPARE_PASSWORD);
					}
				// 두 값이 일치 하지 않는 경우	
				} else {
					// 임시 값을 초기화
					TEMP_PASSWORD = "";
					
					setScreenMode(2);
					
					showAlertMessage("입력한 두 값이 일치하지 않습니다");
				}
			}
			
			break;
		}
		
	}
	
	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 화면 세팅
	
	/**
	 * 입력한 비밀번호의 갯수를 가져와서 그림을 다시 세팅한다.
	 */
	private Runnable setImageViewPassword = new Runnable() {
		
		@Override
		public void run() {
			// TODO Auto-generated method stub
			
			int intComparePassword = COMPARE_PASSWORD.length();
			
			if(intComparePassword == 0) {
				imageViewPassword1.setImageResource(R.drawable.pw_beige_off);
				imageViewPassword2.setImageResource(R.drawable.pw_beige_off);
				imageViewPassword3.setImageResource(R.drawable.pw_beige_off);
				imageViewPassword4.setImageResource(R.drawable.pw_beige_off);
			} else if(intComparePassword == 1) {
				imageViewPassword1.setImageResource(R.drawable.pw_beige_on);
				imageViewPassword2.setImageResource(R.drawable.pw_beige_off);
				imageViewPassword3.setImageResource(R.drawable.pw_beige_off);
				imageViewPassword4.setImageResource(R.drawable.pw_beige_off);
			} else if(intComparePassword == 2) {
				imageViewPassword1.setImageResource(R.drawable.pw_beige_on);
				imageViewPassword2.setImageResource(R.drawable.pw_beige_on);
				imageViewPassword3.setImageResource(R.drawable.pw_beige_off);
				imageViewPassword4.setImageResource(R.drawable.pw_beige_off);
			} else if(intComparePassword == 3) {
				imageViewPassword1.setImageResource(R.drawable.pw_beige_on);
				imageViewPassword2.setImageResource(R.drawable.pw_beige_on);
				imageViewPassword3.setImageResource(R.drawable.pw_beige_on);
				imageViewPassword4.setImageResource(R.drawable.pw_beige_off);
			} else if(intComparePassword == 4) {
				imageViewPassword1.setImageResource(R.drawable.pw_beige_on);
				imageViewPassword2.setImageResource(R.drawable.pw_beige_on);
				imageViewPassword3.setImageResource(R.drawable.pw_beige_on);
				imageViewPassword4.setImageResource(R.drawable.pw_beige_on);
			} else {
				imageViewPassword1.setImageResource(R.drawable.pw_beige_on);
				imageViewPassword2.setImageResource(R.drawable.pw_beige_on);
				imageViewPassword3.setImageResource(R.drawable.pw_beige_on);
				imageViewPassword4.setImageResource(R.drawable.pw_beige_on);
			}
		}
	};

	// 모드에 따라 화면을 세팅해준다  + 초기화
	public void setScreenMode(int screen_mode){
		
		SCREEN_MODE = screen_mode;
		
		switch(screen_mode){
		case 1:
			// 액션 모드에 따라 상단 문구 설정.
			textViewInformation.setText(getString(R.string.password_input_pwd));
			// 화면에 입력된 값 초기화
			COMPARE_PASSWORD = "";
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
			break;
		case 2:
			textViewInformation.setText(getString(R.string.password_input_new_pwd));
			// 화면에 입력된 값 초기화
			COMPARE_PASSWORD = "";
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
			break;
		case 3:
			textViewInformation.setText(getString(R.string.password_input_re_pwd));
			// 화면에 입력된 값 초기화
			COMPARE_PASSWORD = "";
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_IMAGE_VIEW_PASSWORD));
			break;
		}
	}
	
	
	
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.send_me_password, menu);
		return true;
	}
	
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	/**
	 * Handler 를 정의 한다.
	 * 모든 Thread 를 등록해 놓고 호출 한다.
	 */
	private Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			Bundle b = msg.getData();
			switch(msg.what) {
//			// 뒤로가기 버튼을 터치하면 alert 창을 띄우고 앱을 종료 한다.
//			case ALERT_DIALOG_EXIT_ID : 
//				showDialogSystemExit();
//				break;
			// 입력한 비밀번호에 맞춰 그림을 다시 세팅한다.
			case THREAD_IMAGE_VIEW_PASSWORD : 
				runOnUiThread(setImageViewPassword);
				break;
			// 비밀번호가 일치하면 toast 를 띄우고 화면을 닫는다.
			case THREAD_EXACT_PASSWORD : 
				showToastExactPassword();
				break;
				//  비밀번호 설정되었다는 toast 띄운다.
			case THREAD_PASSWORD_SET_SUCCESS : 
				showToastPasswordSetSuccess();
				break;
			case ALERT_SHOW_MESSAGE:
				new AlertDialog.Builder(returnThis())
				.setTitle("비밀번호 설정")							
				.setMessage(b.getString("msg"))
				.setIcon(R.drawable.ic_launcher)		// 경고창.  
				.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						// 그냥 사용자 확인 용이기 때문에 추가 조작 없음.
					}})
					.setNegativeButton("", null).show();
			}
		}
	};
	
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 토스트, 알림창
	/**
	 * 비밀번호가 일치한다는 toast 를 띄운다.
	 */
	public void showToastExactPassword() {
		CharSequence text = "비밀번호가 확인되었습니다.";
		Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
		toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
		toast.show();
	}
	/**
	 * 비밀번호 설정되었다는 toast 띄운다.
	 */
	public void showToastPasswordSetSuccess() {
		CharSequence text = "비밀번호가 설정되었습니다.";	
		Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
		toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
		toast.show();
	}
	

	/**
	 * showResultDialog
	 * 확인 창을 띄운다
	 *
	 * @param msg
	 * @param 
	 * @return 
	 */
	public void showAlertMessage(final String msg){
		runOnUiThread(new Runnable(){		 
			@Override
			public void run(){
				Message message = mHandler.obtainMessage(ALERT_SHOW_MESSAGE);				
				Bundle b = new Bundle();
				b.putString("msg", msg);			// 화면에 보여줄 메시지
				message.setData(b);
				mHandler.sendMessage(message);
			}
		});
	}
	
	
	
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	/**
	 * SharedPreference 정보를 확인 한다.
	 */
	public void selectPreferenceData() {
		
		SharedPreferences mSharedPreference = getSharedPreferences(SendMeConstant.SENDME_PREFERENCE, Activity.MODE_PRIVATE);
		
		MASTER_PASSWORD = mSharedPreference.getString("master_password", "");
		PUBLIC_PASSWORD = mSharedPreference.getString("public_password", "");
		FUNCTION_MODE = mSharedPreference.getString("function_mode", "");
		PHONE_NUMBER = mSharedPreference.getString("phone_number", "");
	}
	
	/**
	 * 마스터 키 저장. 후 종료
	 */
	public void savePreferenceMasterKey(String key){	
		
		// 저장
		SharedPreferences sharedPreferences = getSharedPreferences(SendMeConstant.SENDME_PREFERENCE, Activity.MODE_PRIVATE);
		SharedPreferences.Editor editor = sharedPreferences.edit();
		editor.putString("master_password", key);
		editor.commit();
		
		// 토스트 후 종료
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_PASSWORD_SET_SUCCESS));
		
		returnResultAndFinish(ACTION_CODE_MASTER_KEY_CHANGE, "SUCCESS");		// 종료는 이걸로
	}
	/**
	 * 퍼블릭 키 저장. 후 종료
	 */
	public void savePreferencePublicKey(String key){
		
		// 저장
		SharedPreferences sharedPreferences = getSharedPreferences(SendMeConstant.SENDME_PREFERENCE, Activity.MODE_PRIVATE);
		SharedPreferences.Editor editor = sharedPreferences.edit();
		editor.putString("public_password", key);
		editor.commit();
		
		// 토스트 후 종료
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_PASSWORD_SET_SUCCESS));
		
		returnResultAndFinish(ACTION_CODE_PUBLIC_KEY_CHANGE, "SUCCESS");		// 종료는 이걸로
//		finishActivity();
	}
	
	
	public Context returnThis(){
		return this;
	}
	
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	// 뒤로가기, 닫기 관련
	
	/**
	 * 뒤로 가기 버튼을 정의 한다.
	 * 앱 실행시의 비밀번호 입력화면이기 때문에 뒤로가기 버튼을 터치하면 앱을 종료 한다.
	 */
	@Override
	public void onBackPressed() {
		finishActivity();
	}
	
	// 종료
	public void finishActivity(){
		// 종료하기 전에 액티비티 매니져에서 액티비티를 삭제 한다.
		sendMeActivityManager.removeActivity(SendMePasswordActivity.this);
		// 액티비티를 종료 한다.
		finish();
	}
	
	
	// 자신을 호출했던 액티비티로 돌아간다. (결과 값을 가지고)
	public void returnResultAndFinish(int actionCode, String passwordActivityResult){
		extraBundle.putInt("actionCode", actionCode);
		extraBundle.putString("passwordActivityResult", passwordActivityResult);
		resultIntent.putExtras(extraBundle);
		this.setResult(RESULT_OK, resultIntent); // RESULT_OK 를 돌려주면 부모에서 받아 처리한다.
		finishActivity();
	}
	
	
}
